package ar.com.muebleria.util;

import java.io.File;
import java.util.Calendar;
import java.util.Date;

public class Herramientas {

	public static final String DEFAULT_NUMBER_MASK = "99999999990.00";
	public static String toStringDiaMes(int diaMes){
		return (diaMes < 10 ? "0": "") + Integer.toString(diaMes);
	}
	
	public static Date toDate(int dia, int mes, int anio){
		return Herramientas.toDate(toStringDiaMes(dia)+"/"+toStringDiaMes(mes)+"/"+toStringDiaMes(anio), "dd/MM/yyyy");
	}
	
	public static String sacarAcentosStringUpper(String cadena){
		String out = cadena.toUpperCase();	
		out = out.replaceAll(String.valueOf((char)193),"A");
		out = out.replaceAll(String.valueOf((char)201),"E");
		out = out.replaceAll(String.valueOf((char)205),"I");
		out = out.replaceAll(String.valueOf((char)211),"O");		
		out = out.replaceAll(String.valueOf((char)218),"U");	
		out = out.replaceAll(String.valueOf((char)209),"N");	
		return out;
	}
	
	public static String sacarAcentosString(String cadena){
		String out = cadena;
		out = out.replaceAll(String.valueOf((char)225),"a");
		out = out.replaceAll(String.valueOf((char)233),"e");
		out = out.replaceAll(String.valueOf((char)237),"i");
		out = out.replaceAll(String.valueOf((char)243),"o");		
		out = out.replaceAll(String.valueOf((char)250),"u");	
		out = out.replaceAll(String.valueOf((char)193),"A");
		out = out.replaceAll(String.valueOf((char)201),"E");
		out = out.replaceAll(String.valueOf((char)205),"I");
		out = out.replaceAll(String.valueOf((char)211),"O");		
		out = out.replaceAll(String.valueOf((char)218),"U");	
		out = out.replaceAll(String.valueOf((char)209),"N");	
		out = out.replaceAll(String.valueOf((char)241),"n");
		return out;
	}
	
	
	public static String cortarString(String cadena, int cantidad, boolean puntos){
		if (cadena == null || cadena.length() <= cantidad)
			return cadena;
		else
			return cadena.substring(0, cantidad)+(puntos ? "..." : "");
	}
	
	public static boolean existeArchivo(String archivo){
		try{
			File f = new File(archivo);
			return f.exists();
		}
		catch(Exception e){
			return false;
		}
	}
	
	public static double getValorDouble(double numero, int caracteres, int decimales){
		String mascara = "";
		for (int i=1;i<caracteres;++i)
			mascara += "9";
		mascara += "0";
		if (decimales >0){
			mascara += ".";
			for (int i=0;i<decimales;++i)
				mascara += "0";
		}
		//System.out.println("Mascara:"+mascara);
		String conversionAux = toString(numero, mascara);
		return toDouble(conversionAux,mascara);
	}
		
	public static String getDiaDeHoy(){
		try{
			return ConvertionTools.toString(new Date(), "dd");
		}
		catch(Exception e){
			return null;
		}
	}
	
	public static Date getDiaDeHoyMasDias(int cantidadDeDias){
		try{
			return new Date(getHoy().getTime()+((long)cantidadDeDias*((long)24*60*60*1000)));
		}
		catch(Exception e){
			return null;
		}
	}	
	
	public static Date getDiaDeHoyMasHoras(int cantidadDeHoras){
		try{
			return new Date(getHoy().getTime()+((long)cantidadDeHoras*((long)60*60*1000)));
		}
		catch(Exception e){
			return null;
		}
	}
	
	public static int getMesActual(){
		try{
			return Integer.parseInt(ConvertionTools.toString(new Date(), "MM"));
		}
		catch(Exception e){
			return 0;
		}
	}	
	
	public static int getAnioActual(){
		try{
			return Integer.parseInt(ConvertionTools.toString(new Date(), "yyyy"));
		}
		catch(Exception e){
			return 0;
		}
	}	
	
	public static String toString(Date fecha){
		try{
			return ConvertionTools.toString(fecha, "dd/MM/yyyy");
		}
		catch(Exception e){
			return null;
		}
	}	
	
	
	
	public static Date toDate(String fecha,String mascara){
		try{
			return ConvertionTools.toDate(fecha, mascara);
		}
		catch(Exception e){
			return null;
		}
	}	
	
	public static String toString(double parNumero,String mascara){
		try{
			return ConvertionTools.toString(parNumero, mascara);
		}
		catch(Exception e){
			return null;
		}
	}	
		
	
	public static double toDouble(String parNumero,String mascara){
		try{
			return ConvertionTools.toDouble(parNumero, mascara);
		}
		catch(Exception e){
			return 0;
		}
	}	
	
	public static Date toDate(String fecha){
		try{
			return ConvertionTools.toDate(fecha, "dd/MM/yyyy");
		}
		catch(Exception e){
			return null;
		}
	}		
	
	public static Date getAhora(){
		try{
			return new Date();
		}
		catch(Exception e){
			return null;
		}
	}	
	
	public static Date getHoy(){
		try{
			return truncDate(new Date());
		}
		catch(Exception e){
			return null;
		}
	}	
	
	
	public static Date truncDate(Date fecha){
		try{
			return toDate(toString(fecha,"dd/MM/yyyy"),"dd/MM/yyyy");
		}
		catch(Exception e){
			return null;
		}
	}		
	
	
	public static String toString(Date fecha, String mascara){
		try{
			return ConvertionTools.toString(fecha, mascara);
		}
		catch(Exception e){
			return null;
		}
	}			
	
	public static String diaSemana(Date fecha, String[] nombresDias){
		try{
			Calendar cal = Calendar.getInstance();
			cal.setTime(fecha);
			int dia = cal.get(Calendar.DAY_OF_WEEK) - 1;
			return nombresDias[dia];
		}
		catch(Exception e){
			return null;
		}
	}	
	
	public static int diaSemana(Date fecha){
		try{
			Calendar cal = Calendar.getInstance();
			cal.setTime(fecha);
			return cal.get(Calendar.DAY_OF_WEEK) - 1;
		}
		catch(Exception e){
			return -1;
		}
	}	
		
	
	public static boolean esDelMes(Date fecha,int mes){
		try{
			Calendar cal = Calendar.getInstance();
			cal.setTime(fecha);
			return (cal.get(Calendar.MONTH)+1) == mes;
		}
		catch(Exception e){
			return false;
		}
	}	
	
	public static long getMinutos(double hora){
		return (long) ((Math.abs(hora)-(long)Math.abs(hora))*60);
	}

	public static long getHoras(double hora){
		return Math.abs((long)(hora));
	}
	
	/**
	 * Funcion que convierte hora decimal en formato hh:mm
	 * @param hora decimal
	 * @return hora en formato hh:mm
	 */
	public static String getHorasMinutos(double horaDecimal){
		long horas = getHoras(horaDecimal);
		horas = horas%24; 
		long minutos = getMinutos(horaDecimal);
		return (horas <10 ? "0"+String.valueOf(horas):String.valueOf(horas) )+":"+(minutos <10 ? "0"+String.valueOf(minutos):String.valueOf(minutos));
	}
	
	public static String getHorasMinutosLong(long milliseg){
		double horas = ((double)milliseg)/((double)1000*60*60);
		return getHorasMinutos(horas);
	}
	
	/**
	 * Funcion para convertir horas y minutos de formato hh:mm
	 * en double. Ejemplo: 2:30 hs convierte a 2.5 hs
	 * @param parameter formato hh:mm
	 * @return
	 */
	public static double getHoraDecimal(String parameter) {
		String vecHorasMinutos[]  = parameter.split(":");
		double horas   = Double.valueOf(vecHorasMinutos[0]);
		double minutos = Double.valueOf(vecHorasMinutos[1]);
		return horas + minutos/60;
	}

	/**
	 * Funcion para sumar horas y minutos de formato hh:mm
	 * @param horasMinutos1 formato hh:mm
	 * @param horasMinutos2 formato hh:mm
	 * @return resultado en formato hh:mm
	 */
	public static String sumarHoras(String horasMinutos1, String horasMinutos2) {
		String vecHorasMinutos1[]  = horasMinutos1.split(":");
		String vecHorasMinutos2[]  = horasMinutos2.split(":");
		int horas   = 0;
		int minutos = 0;
		minutos = Integer.valueOf(vecHorasMinutos1[1])+Integer.valueOf(vecHorasMinutos2[1]);
		horas   = Integer.valueOf(vecHorasMinutos1[0])+Integer.valueOf(vecHorasMinutos2[0]);
		if(Integer.valueOf(vecHorasMinutos1[1])+Integer.valueOf(vecHorasMinutos2[1]) >59){ 
			++horas;
		}
		horas   = horas   %24;
		minutos = minutos %60;
		return (horas <10 ? "0"+String.valueOf(horas):String.valueOf(horas) )+":"+(minutos <10 ? "0"+String.valueOf(minutos):String.valueOf(minutos));
	}
	
	public static String getBorderBottomFino(){
		return "border-bottom:1px solid #000000";
	}
	
	public static String getBorderBottomGrueso(){
		return "border-bottom:2px solid #000000";
	}
	public static String getBorderTopGrueso(){
		return "border-top:2px solid #000000";
	}
	
}
